package models.services;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import models.entities.Proveedor;
import models.services.exc.EntityNotFoundException;
import models.services.utils.DBManager;

public class ServicioProveedores implements ICatalog<Proveedor> {

	private final static Logger logger = Logger
			.getLogger(ServicioProveedores.class);

	@Override
	public boolean borrar(Proveedor entity) {
		DBManager manager = DBManager.getInstance();
		return manager.borrar(entity.getId(), "proveedores");
	}

	@Override
	public int guardarActualizar(Proveedor prov) {
		DBManager manager = DBManager.getInstance();
		String nombreComp = prov.getNombreComp();
		String contactName = prov.getContactName();
		String calle = prov.getCalle();
		int numeroCasa = prov.getNumeroCasa();
		int idCol = prov.getIdCol();
		String entreCalles1 = prov.getEntreCalles1();
		String tel = prov.getTel();
		int cp = prov.getCp();
		String correo = prov.getCorreo();
		// char sexo = prov.getSexo();
		String entreCalles2 = prov.getEntreCalles2();
		String update = "insert into proveedores values(null,'" + nombreComp
				+ "','" + contactName + "','" + calle + "'," + numeroCasa + ","
				+ idCol + ",'" + entreCalles1 + "'," + tel + "," + cp + ",'"
				+ correo + "','" + entreCalles2 + "')";
		int res = manager.guardarActualizar(update);
		return res;
	}

	@Override
	public Proveedor obtener(int id) throws EntityNotFoundException {
		String consulta = "select * from proveedores where id=" + id;
		ResultSet rs = DBManager.getInstance().consultar(consulta);
		Proveedor prov = new Proveedor();
		try {
			if (rs.next()) {
				do {
					int idGet = rs.getInt("id");
					String nombreComp = rs.getString("nombrecomp");
					String contactName = rs.getString("contactname");
					String calle = rs.getString("calle");
					int numeroCasa = rs.getInt("numeroCasa");
					int idColonia = rs.getInt("idcolonia");
					String entreCalles1 = rs.getString("entrecalles1");
					String tel = rs.getString("tel");
					int cp = rs.getInt("cp");
					String correo = rs.getString("correo");
					char sexo = rs.getString("sexo").charAt(0);
					String entreCalles2 = rs.getString("entrecalles2");
					prov.setCalle(calle);
					prov.setContactName(contactName);
					prov.setCorreo(correo);
					prov.setCp(cp);
					prov.setEntreCalles1(entreCalles1);
					prov.setEntreCalles2(entreCalles2);
					prov.setId(idGet);
					prov.setIdCol(idColonia);
					prov.setNombreComp(nombreComp);
					prov.setNumeroCasa(numeroCasa);
					prov.setSexo(sexo);
					prov.setTel(tel);
				} while (rs.next());
			} else {
				throw new EntityNotFoundException("Proveedor no encontrado");
			}
		} catch (SQLException e) {
			logger.error(e.getCause(), e);
		}
		return prov;
	}

	public List<Proveedor> obtenerTodos() {
		List<Proveedor> proveedores = new ArrayList<Proveedor>();
		String sql = "select * from proveedores";
		DBManager manager = DBManager.getInstance();
		ResultSet rsProv = manager.consultar(sql);
		try {
			while (rsProv.next()) {
				Proveedor prov = new Proveedor();
				int idGet = rsProv.getInt("id");
				String nombreComp = rsProv.getString("nombrecomp");
				String contactName = rsProv.getString("contactname");
				String calle = rsProv.getString("calle");
				int numeroCasa = rsProv.getInt("numeroCasa");
				int idColonia = rsProv.getInt("idcolonia");
				String entreCalles1 = rsProv.getString("entrecalles1");
				String tel = rsProv.getString("tel");
				int cp = rsProv.getInt("cp");
				String correo = rsProv.getString("correo");
				// char sexo = rsProv.getString("sexo").charAt(0);
				String entreCalles2 = rsProv.getString("entrecalles2");
				prov.setCalle(calle);
				prov.setContactName(contactName);
				prov.setCorreo(correo);
				prov.setCp(cp);
				prov.setEntreCalles1(entreCalles1);
				prov.setEntreCalles2(entreCalles2);
				prov.setId(idGet);
				prov.setIdCol(idColonia);
				prov.setNombreComp(nombreComp);
				prov.setNumeroCasa(numeroCasa);
				// prov.setSexo(sexo);
				prov.setTel(tel);
				proveedores.add(prov);
			}
		} catch (Exception e) {
			logger.error(e.getCause(), e);
		}
		return proveedores;
	}

	public int update(String campo, String value, int id) {
		DBManager manager = DBManager.getInstance();
		String sql = "update proveedores set " + campo + " = '" + value
				+ "' where id=" + id;
		int guardarActualizar = manager.guardarActualizar(sql);
		return guardarActualizar;
	}

	public int update(String campo, int value, int id) {
		DBManager manager = DBManager.getInstance();
		String sql = "update proveedores set " + campo + " = " + value
				+ " where id=" + id;
		int guardarActualizar = manager.guardarActualizar(sql);
		return guardarActualizar;

	}

	@Override
	public List<Proveedor> buscarPorNumero(String campo, int valor) {
		List<Proveedor> provs = new ArrayList<Proveedor>();
		DBManager manager = DBManager.getInstance();
		String sql = "select * from proveedores where " + campo + " = " + valor;
		ResultSet rs = manager.consultar(sql);
		return this.buscar(rs, provs);
	}

	@Override
	public List<Proveedor> buscarPorString(String campo, String valor) {
		List<Proveedor> provs = new ArrayList<Proveedor>();
		DBManager manager = DBManager.getInstance();
		String sql = "select * from proveedores where " + campo + " like '%"
				+ valor + "%'";
		ResultSet rs = manager.consultar(sql);
		return this.buscar(rs, provs);
	}

	private List<Proveedor> buscar(ResultSet rsProv, List<Proveedor> provs) {
		try {
			Proveedor prov = new Proveedor();
			System.out.println("AQUI " + rsProv);
			while (rsProv.next()) {
				int idGet = rsProv.getInt("id");
				String nombreComp = rsProv.getString("nombrecomp");
				String contactName = rsProv.getString("contactname");
				String calle = rsProv.getString("calle");
				int numeroCasa = rsProv.getInt("numeroCasa");
				int idColonia = rsProv.getInt("idcolonia");
				String entreCalles1 = rsProv.getString("entrecalles1");
				String tel = rsProv.getString("tel");
				int cp = rsProv.getInt("cp");
				String correo = rsProv.getString("correo");
				char sexo = rsProv.getString("sexo").charAt(0);
				String entreCalles2 = rsProv.getString("entrecalles2");
				prov.setCalle(calle);
				prov.setContactName(contactName);
				prov.setCorreo(correo);
				prov.setCp(cp);
				prov.setEntreCalles1(entreCalles1);
				prov.setEntreCalles2(entreCalles2);
				prov.setId(idGet);
				prov.setIdCol(idColonia);
				prov.setNombreComp(nombreComp);
				prov.setNumeroCasa(numeroCasa);
				prov.setSexo(sexo);
				prov.setTel(tel);
				provs.add(prov);
			}
		} catch (Exception e) {
			logger.error(e.getCause(), e);
			return null;
		}
		return provs;
	}

}
